Osoba, firma, obchod i schůzka dnes vykreslují stejné taby — úkoly, e-maily, poznámky, produkty — každý po svém, ve třech CSS namespacech a s odchýleným obsahem. Návrh zavádí jeden datově řízený tab host a knihovnu kanonických panelů po vzoru už existujícího Record detail rail: obsah tabu je identický všude, kód žije na jednom místě.
Řádky = každý tab, který se v produktu objevuje. Sloupce = čtyři typy detailu. Barva buňky říká, do které vrstvy tab patří — a tím i to, jak se má sjednotit. Značka drift označuje místa, kde se dnešní implementace liší i tam, kde by měla být totožná.
Taby se kopírovaly z obrazovky na obrazovku a pak se každá vyvíjela zvlášť. Výsledek: uživatel vidí „Úkoly" na osobě jinak než na obchodu, a designér musí opravit chybu na čtyřech místech.
Osoba a firma volají sdílený DS.TaskList. Obchod ukazuje prázdný SimpleTab. Schůzka má vlastní .task-grp se skupinami „Navrhované / Schválené". Tři různé řádky, checkboxy i chování.
Navázané schůzky se jmenují Setkání (klíč hovory) na osobě, Setkání (klíč setkani) na firmě a Schůzky na obchodu. Rozdílné popisky i klíče stavu = nekonzistence a křehké odkazy.
Osoba, firma i obchod používají .pr-tabs; schůzka celý vlastní .mr-tabs. Dvě sady stylů pro tentýž underline strip — každá oprava se musí dělat dvakrát a stejně se rozjedou.
Prázdný tab má na obchodu bohatý EmptyState s CTA, jinde tichý text nebo nic. Prázdno je přitom nejčastější stav — patří do panelu, ne do každé obrazovky zvlášť.
Rail už tenhle vzor dokázal: jedna komponenta řízená konfigurací obsluhuje firmu, osobu, obchod i schůzku — přepínač mění jen data, ne kód. Taby dostanou totéž. Obrazovka jen řekne které taby a z jakého datového řezu; host + panel se postarají o vzhled a stavy.
Každý panel je čistá komponenta: dostane normalizovaný datový řez a vykreslí ho — včetně prázdného, načítacího a chybového stavu. Detail nikdy nesahá do vnitřku panelu, jen dodá data.
groups (otevřené / hotové / návrhy AI), onAddthreads, scope (osoba × firma × obchod)notes, title (alias „Vlastní zápis")rel="meeting|person|deal|company|list" → entity chip + meta + prázdnorel, ne per-obrazovkaNepřepisovat čtyři obrazovky najednou. Nejdřív povýšit strip a nejrozbitější panel, pak přepínat obrazovky jednu po druhé na host. Každý krok je samostatně nasaditelný.
prehled · aktivita · emaily · poznamky · ukoly · soubory · relations · produkty …). Obrazovka klíč vybírá, nevymýšlí.relations rel=meeting; alias popisku se řeší v hostu, ne copy-paste na screenu.if (type === "deal") uvnitř panelu — jinak se drift vrátí zadními vrátky.